{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "52e4222a",
   "metadata": {},
   "source": [
    "---------\n",
    "* Author:Xiao yang\n",
    "* 时间：1202-week14\n",
    "\n",
    "*  资源:\n",
    "\n",
    "> 1. [zhichao博客](https://www.cnblogs.com/xuzhichao/p/11570285.html)\n",
    "> 2. [python 官网资料](https://docs.python.org/3/tutorial/controlflow.html#defining-functions)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3d223790",
   "metadata": {},
   "source": [
    "# 1.  函数\n",
    "##  1.[函数的定义](https://docs.python.org/3/tutorial/controlflow.html#defining-functions)\n",
    "> 1. 数学 :     f(x)= ax + b\n",
    "> 2. python : def fib(x)\n",
    "> 3. 编程思维 VS 数学思维\n",
    ">> 1. 函数可以被定义名称，定义的关键字    <font style=\"color:red\">**def**</font>\n",
    ">> 2. 数学思维是写在同一行（定义函数 和 运算公式），面向对象编程中 函数写多行，定义函数为单独一行\n",
    ">> 3. 数学函数一般没有注释，而编程过程中，一般需要对函数进行注释描述（docstring,课本p151 ）\n",
    ">> 4. 数学中：ax +b 计算公式，而编程中，我们将函数的内容成为**函数体**，函数体要有一定的**缩进**\n",
    ">> 5. 数学函数执行，将参数代入公式，编程中函数执行，将参数带入函数体\n",
    "\n",
    "## 2. [关于函数的更多定义](https://docs.python.org/3/tutorial/controlflow.html#more-on-defining-functions)\n",
    "> 1. 函数的参数\n",
    ">> 1.  形式参数\n",
    ">> 2.  实际参数\n",
    ">> 3.  默认参数\n",
    ">> 4.  位置参数\n",
    ">> 5.  关键字参数\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a9ca99f0",
   "metadata": {},
   "source": [
    "# 函数的定义\n",
    "> 1. 定义函数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "86e352f7",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "\"\\ndef:定义函数的关键字\\nflb：函数名\\n(n)：定义函数的参数\\n：文档描述 : \\n代码块：\\n     a, b = 0, 1\\n     while a < n:\\n        print(a, end=' ')\\n         a, b = b, a+b\\n     print()\\n\""
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 斐波那切数列：0 1 1 2 3 5 8 13 21 34 ...\n",
    "def fib(x):        # def 表示：定义\n",
    "    \"\"\"列出指定x以内的斐波那切数列\"\"\"        #  \"\"\" 内容 \"\"\" 表示：注释\n",
    "    a , b = 0 ,1\n",
    "    while(a < x):\n",
    "        print(a,end = ' ')\n",
    "        a,b = b , a+b\n",
    "        \n",
    "        \n",
    "\"\"\"\n",
    "def:定义函数的关键字\n",
    "flb：函数名\n",
    "(n)：定义函数的参数\n",
    "\"\"\"\"\"\"：文档描述 : 与使用者进行 交互的 唯一途径\n",
    "代码块： \n",
    "     a, b = 0, 1\n",
    "     while a < n:\n",
    "        print(a, end=' ')\n",
    "         a, b = b, a+b\n",
    "     print()\n",
    "\"\"\"      "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "01de0fe3",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0 1 1 2 3 5 8 13 21 34 55 89 "
     ]
    }
   ],
   "source": [
    "fib(100)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "95aa640a",
   "metadata": {},
   "outputs": [],
   "source": [
    "## 实践 ： 请大家写一个函数，这个函数可以打印 “你好，xxx同学”"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "7b2a379d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Hello! xiaoyang 同学 ！\n"
     ]
    }
   ],
   "source": [
    "def stu():     #定义一个函数,关键词为\"def\",函数名为\"stu\",最后以“：”结尾\n",
    "    \"\"\"你好，xxx同学\"\"\"     #描述函数的具体功能\n",
    "    print(\"Hello! xiaoyang 同学 ！\")      #函数体的代码块，用于实现函数功能\n",
    "stu()      # 调用函数\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "64ae42c8",
   "metadata": {},
   "outputs": [],
   "source": [
    "def hello(name):\n",
    "    \"\"\"显示问候语\"\"\"\n",
    "    print(\"你好，%s同学~\"%(name))\n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "8625382a",
   "metadata": {},
   "outputs": [],
   "source": [
    " %s 占位符\n",
    "    \n",
    "#     %s      表示字符串str ， 还可以表示整数int  ,   浮点数float;\n",
    "\n",
    "#     %d      表示整数int          ，     还可以表示浮点数float(去除整数部分)\n",
    "\n",
    "#     %f      表示浮点数float      ，    还可以表示整数int(默认保留6位小数)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "62d12f94",
   "metadata": {},
   "source": [
    "> 2. 调用函数/使用函数\n",
    ">> 1. 函数名(参数)\n",
    ">> 2. 参数可以不存在"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "aa3a5ed1",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "你好，Lihua同学~\n"
     ]
    }
   ],
   "source": [
    "hello(\"Lihua\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "43959fff",
   "metadata": {},
   "outputs": [],
   "source": [
    "def hello():\n",
    "    \"\"\"显示问候语\"\"\"\n",
    "    print(\"hello,world\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "4d7cc915",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Help on function hello in module __main__:\n",
      "\n",
      "hello(name)\n",
      "    显示问候语\n",
      "\n"
     ]
    }
   ],
   "source": [
    "help(hello)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "7b9c431d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "hello,world\n"
     ]
    }
   ],
   "source": [
    "hello()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "a3a4b06e",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 回顾与思考\n",
    "import time"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "2d0debbf",
   "metadata": {},
   "outputs": [],
   "source": [
    "# sleep() 需要给定一个时间(int)参数\n",
    "time.sleep(3)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "80171305",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "time.struct_time(tm_year=2021, tm_mon=12, tm_mday=4, tm_hour=18, tm_min=17, tm_sec=37, tm_wday=5, tm_yday=338, tm_isdst=0)"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# localtime() 不需要被定义\n",
    "time.localtime()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "id": "a86f3c22",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Help on built-in function localtime in module time:\n",
      "\n",
      "localtime(...)\n",
      "    localtime([seconds]) -> (tm_year,tm_mon,tm_mday,tm_hour,tm_min,\n",
      "                              tm_sec,tm_wday,tm_yday,tm_isdst)\n",
      "    \n",
      "    Convert seconds since the Epoch to a time tuple expressing local time.\n",
      "    When 'seconds' is not passed in, convert the current time instead.\n",
      "\n"
     ]
    }
   ],
   "source": [
    "help(time.localtime)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e04acfe7",
   "metadata": {},
   "source": [
    "> 3. 函数的优势：\n",
    ">> 1. 可以重复使用相同的功能，避免重复造轮子\n",
    ">> 2. 使用者可以不了解函数本身，只需要清楚如何使用即可\n",
    ">> 3. 使用/调用方便，只需要清楚传递的 函数名及参数"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5969a46f",
   "metadata": {},
   "source": [
    "# 函数的参数"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5157d22e",
   "metadata": {},
   "source": [
    "> 1. 形式参数（形参）：形式参数，不是实际存在的，是虚拟变量。在定义函数和函数体的时候使用形参，目的是在函数调用时接收实参\n",
    ">> 1. 在**定义**函数的时候定义的参数\n",
    "\n",
    ">  2.  实际参数（实参）：实际参数，调用函数时传递给函数的参数，可以是常量、变量，表达式，函数，传给形参\n",
    ">> 1. 在**调用**函数的时候传递的参数\n",
    ">> 2. 调用函数时，形式参数分配空间，传递实际参数，执行函数内容\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "dd8b4776",
   "metadata": {},
   "source": [
    "* 形参与实参 的 区别：形参是虚拟的，不占用空间，形参变量只有在被调用时才分配内存单元，实参是一个变量，占用内存空间，数据传递单向，实参传给形参，不能倒过来。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a54fe6eb",
   "metadata": {},
   "source": [
    "* 课本函数实践案例 p151 ："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "e9484bb6",
   "metadata": {},
   "outputs": [],
   "source": [
    "def search4vowels():\n",
    "    \"\"\"Display any vowels found in an asked-for word.\"\"\"\n",
    "    vowels = set('aeiou')\n",
    "    word = input(\"Provide a word to search for vowels:\")\n",
    "    found = vowels.intersection(set(word))\n",
    "    for vowel in found:\n",
    "        print(vowel)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "be908f92",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Provide a word to search for vowels:The blue of the sky melted into the green landscape.\n",
      "i\n",
      "a\n",
      "e\n",
      "o\n",
      "u\n"
     ]
    }
   ],
   "source": [
    "search4vowels()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "32767279",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 课上引用的例子：\n",
    "def search4vowels(word):\n",
    "    \"\"\"显示文本中出现的元音字母有哪些\"\"\"\n",
    "    vowels = set(\"aeiou\")\n",
    "    word = set(word)\n",
    "    print(vowels & word)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5f2796ef",
   "metadata": {},
   "source": [
    "* 形式参数： word\n",
    "* 实际参数：\"fbheduigpewjiewmcfkdlaepw\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "74f0bde3",
   "metadata": {},
   "outputs": [],
   "source": [
    "#  课本函数实践案例\n",
    "def search4vowels(word):\n",
    "    \"\"\"\n",
    "    显示文本中出现的元音字母有哪些\n",
    "    \n",
    "    word是文本信息，请输入正确的文本给word\n",
    "    \"\"\"\n",
    "    vowels = set(\"aeiou\")\n",
    "    word = set(word)\n",
    "    print(vowels & word)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "e904b8e0",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Help on function search4vowels in module __main__:\n",
      "\n",
      "search4vowels(word)\n",
      "    显示文本中出现的元音字母有哪些\n",
      "    \n",
      "    word是文本信息，请输入正确的文本给word\n",
      "\n"
     ]
    }
   ],
   "source": [
    "help(search4vowels)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "e0d051ef",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'a', 'e', 'i', 'u'}\n"
     ]
    }
   ],
   "source": [
    "search4vowels(\"fbheduigpewjiewmcfkdlaepw\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5e56d096",
   "metadata": {},
   "source": [
    "* 在多个参数的情境下\n",
    "\n",
    "> 1. 位置参数\n",
    ">> 1. 在形式参数的定义中，有一定的先后顺序\n",
    ">> 2. 在调用函数时，要考虑形参的先后顺序\n",
    ">> 3. 调用函数时，不仅要考虑参数的位置，还需要考虑形参的个数\n",
    "\n",
    "> 2. 关键字参数\n",
    ">> 1. 在调用函数时，关键字参数可以不仅考虑形式参数的位置\n",
    "\n",
    "> 3. 默认参数\n",
    ">> 1. 调用函数时，可以省略传递的参数信息\n",
    ">> 2. 调用函数时，如果给默认参数赋值，会替换默认参数的结果"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "104da964",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "I have a hamster.\n",
      "Myhamster's name is Harry.\n",
      "\n",
      "I have a cat.\n",
      "Mycat's name is Python.\n"
     ]
    }
   ],
   "source": [
    "def describe_pet(animal_type,pet_name):\n",
    "    \"\"\"显示宠物信息\"\"\"\n",
    "    print(\"\\nI have a \" + animal_type + \".\")\n",
    "    print(\"My\" + animal_type + \"'s name is \"+pet_name.title() + \".\")\n",
    "\n",
    "describe_pet('hamster','harry')\n",
    "describe_pet('cat','python')  #函数调用多次是一种效率极高的工作方式"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "id": "538dbc64",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "I have a 豆豆.\n",
      "My豆豆's name is Dog.\n"
     ]
    }
   ],
   "source": [
    "describe_pet(\"豆豆\",\"dog\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "id": "a6c655b1",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "I have a dog.\n",
      "Mydog's name is 豆豆.\n"
     ]
    }
   ],
   "source": [
    "describe_pet(\"dog\",\"豆豆\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "id": "98113a2b",
   "metadata": {},
   "outputs": [
    {
     "ename": "TypeError",
     "evalue": "describe_pet() missing 1 required positional argument: 'pet_name'",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mTypeError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[1;32m<ipython-input-39-a70f5cbb422b>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mdescribe_pet\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"dog\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[1;31mTypeError\u001b[0m: describe_pet() missing 1 required positional argument: 'pet_name'"
     ]
    }
   ],
   "source": [
    "describe_pet(\"豆豆\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "id": "03915bde",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "I have a cat.\n",
      "Mycat's name is 微积分.\n"
     ]
    }
   ],
   "source": [
    "describe_pet(animal_type=\"cat\",pet_name=\"微积分\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "1cf097e5",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 默认参数\n",
    "def describe_pet(pet_name,animal_type=\"dog\"):\n",
    "    \"\"\"显示宠物信息\"\"\"\n",
    "    print(\"\\nI have a \" + animal_type + \".\")\n",
    "    print(\"My\" + animal_type + \"'s name is \"+pet_name.title() + \".\")\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "6dd97bc1",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "I have a 豆豆.\n",
      "My豆豆's name is Cat.\n"
     ]
    }
   ],
   "source": [
    "describe_pet(\"豆豆\",\"cat\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d5c2a6ae",
   "metadata": {},
   "source": [
    "---\n",
    "* 参数注意事项实践\n",
    "> 1. 位置参数和关键字参数同时使用（调用函数）\n",
    ">> 1. positional argument follows keyword argument  (关键字参数 <font style=\"color:red\">**均**</font>应该放在位置参数后面)\n",
    ">> 2. 只要满足1的条件，剩余的关键字参数（多个）不考虑先后顺序\n",
    "\n",
    "> 2. 非默认参数和默认参数同时使用（定义函数）\n",
    ">> 1. non-default argument follows default argument (默认函数<font style=\"color:red\">**均**</font>应该放在非默认参数之后)\n",
    ">> 2. 只要满足1的条件，剩余的默认参数（多个）不考虑先后顺序"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "id": "08d54a3f",
   "metadata": {},
   "outputs": [],
   "source": [
    "def test(x,y,z):\n",
    "    \"\"\"打印x,y,z的结果\"\"\"\n",
    "    print(x)\n",
    "    print(y)\n",
    "    print(z)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "id": "9c898e08",
   "metadata": {},
   "outputs": [
    {
     "ename": "SyntaxError",
     "evalue": "positional argument follows keyword argument (<ipython-input-35-0d3bd7e3ec53>, line 2)",
     "output_type": "error",
     "traceback": [
      "\u001b[1;36m  File \u001b[1;32m\"<ipython-input-35-0d3bd7e3ec53>\"\u001b[1;36m, line \u001b[1;32m2\u001b[0m\n\u001b[1;33m    test(5,y=3,2)\u001b[0m\n\u001b[1;37m               ^\u001b[0m\n\u001b[1;31mSyntaxError\u001b[0m\u001b[1;31m:\u001b[0m positional argument follows keyword argument\n"
     ]
    }
   ],
   "source": [
    "# 实践1\n",
    "test(5,y=3,2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "id": "ef443318",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "5\n",
      "3\n",
      "2\n"
     ]
    }
   ],
   "source": [
    "# 实践2\n",
    "test(5,3,z = 2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "id": "f75ecbbb",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "5\n",
      "2\n",
      "3\n"
     ]
    }
   ],
   "source": [
    "# 实践3\n",
    "test(5,z = 3,y = 2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "id": "7de11269",
   "metadata": {},
   "outputs": [
    {
     "ename": "SyntaxError",
     "evalue": "non-default argument follows default argument (<ipython-input-38-eac1f1ed18cb>, line 2)",
     "output_type": "error",
     "traceback": [
      "\u001b[1;36m  File \u001b[1;32m\"<ipython-input-38-eac1f1ed18cb>\"\u001b[1;36m, line \u001b[1;32m2\u001b[0m\n\u001b[1;33m    def test(x,y=1,z):\u001b[0m\n\u001b[1;37m             ^\u001b[0m\n\u001b[1;31mSyntaxError\u001b[0m\u001b[1;31m:\u001b[0m non-default argument follows default argument\n"
     ]
    }
   ],
   "source": [
    "# 测试2：\n",
    "def test(x,y=1,z):\n",
    "    \"\"\"打印x,y,z的结果\"\"\"\n",
    "    print(x)\n",
    "    print(y)\n",
    "    print(z)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "id": "5123ff5d",
   "metadata": {},
   "outputs": [],
   "source": [
    "def test(x,z,y=1):\n",
    "    \"\"\"打印x,y,z的结果\"\"\"\n",
    "    print(x)\n",
    "    print(y)\n",
    "    print(z)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "id": "3bd38251",
   "metadata": {},
   "outputs": [
    {
     "ename": "NameError",
     "evalue": "name 'x' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mNameError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[1;32m<ipython-input-40-b91864ff1933>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mtest\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0mz\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0my\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[1;31mNameError\u001b[0m: name 'x' is not defined"
     ]
    }
   ],
   "source": [
    " test(x,z,y=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "id": "cd1a217e",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "6\n",
      "1\n",
      "7\n"
     ]
    }
   ],
   "source": [
    " test(6,7,y=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "id": "72a2bcc7",
   "metadata": {},
   "outputs": [
    {
     "ename": "NameError",
     "evalue": "name 'y' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mNameError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[1;32m<ipython-input-51-5877868b0f49>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mtest\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m6\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m7\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0my\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[1;31mNameError\u001b[0m: name 'y' is not defined"
     ]
    }
   ],
   "source": [
    " test(6,7,y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "id": "2315556d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "6\n",
      "1\n",
      "7\n"
     ]
    }
   ],
   "source": [
    " test(6,7,1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "47359c1b",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "7107aef2",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a89970bf",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.8"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
